

/**
 内存中的存储单元是由一个一个的二进制位组成的
 每个二进制位只能存储0或者1
 如果我们使用1个二进制位来存储数据的话，这样的话，每一个二进制位只能存储2的数据
 为了能够方便的存储多个数据，把内存中的8个二进制位分为1组，叫做一个字节，作为存储数据的做小基本单位
 如果想内存中存储数据，最少要用一个字节
 一个字节最多能够标示256种数据
 
 单位换算：
 8bit = 1KB
 1024KB = 1MB
 1024MB = 1GB
 1GB = 1TB
 
 
 声明变量的时候，并不是去开辟1块控件
 而是想系统在内存中申请1个指定字节数的连续字节空间
 
 int 4字节
 double 8字节
 float 4字节
 chr 1字节
 
 
 */

/**
 
     sizeof 运算符：
     计算变量、常亮在内存中占用的字节数。
     1. 使用方法
     sizeof(数据类型) 就会返回这个数据类型的数据类型的变量在内存中占据多少字节
     sizeof(变量名) 就会返回这个变量在内存中占据多少字节
     sizeof(常量) 就会返回这个常量数据在内存中占据的字节数
     常量：直接写1个数据，这个数据就是常量
     char 类型的变量在内存中占据1个字节
     char 类型的常量在内存中占据4个字节
 */

/**
 
 1. 不同类型的变量在内存中占据不同的字节数
     int 4
     float 4
     Double 8
     char 1
 2. 变量占用的字节空间一定是连续的
     内存中存储数据的最小单位是字节
     每1个字节都有一个独一无二的内存地址，是一个十六进制的数
     并且相邻的字节地址是一定是连续的
     
     声明一个变量，就是在内存中分配连续的指定字节数的空间
 
     1）在为变量分配字节空间的时候，是从高地址向底地址分配的，分配连续的指定字节数的空间
         int 4个连续的字节
         int num = 10
     2）存储在变量中的数据，是以数据的二进制补码的形式存储进去的
        存储的时候，低位存储在低字节，高位存储在高字节
     3）变量的地址是组成变量的低字节地址
        使用&取地址可以取出变量地址
 4. 声明变量，就会占用内存空间，
     实际上程序运行的时候，并不是说只有我们代码才会声明变量
     系统自己也会在内存中申请空间存储数据
     
     所以，这就造成了，我们的变量实际在分配字空间的时候，可能我们的变量不是1个挨1个
     因为，我们声明变量的同时，我们的系统也在申请字节空间存储数据
     
     但是，不管怎么样1个变量占用的字节一定是连续的
 
 */

#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    int num1 = 10;
    int num2 = 20;
    char ch = 'a';
    
    printf("num1的地址:%p\n", &num1);
    printf("num2的地址:%p\n", &num2);
    printf("  ch的地址:%p\n", &ch);
    
    return 0;
}
